﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	int a1[][3] = { {0,1,2},{3,4,5} };
//	//int a2[2][4] = { {0,1,2},{3,4},{5} };错误的初始化——越界
//	//int a3[][3] = { {0,,2},{},{3,4,5} };错误的初始化——第一个大括号内多了一个逗号
//	return 0;
//}

//编写一个程序，从用户输入中读取10个整数并存储在一个数组中
// 然后，计算并输出这些整数的平均值。
//int main()
//{
//	int arr[10] = { 0 };
//	int sum = 0;//sum存放整数的和
//	int sz = (sizeof(arr) / sizeof(arr[0]));//sz存放数组元素个数
//	for (int i = 0; i < sz; i++)
//	{
//		scanf("%d", &arr[i]);
//		sum = sum + arr[i];
//	}
//	printf("平均值为%d\n", sum/sz);
//	return 0;
//}
//多组输入，一个整数（2~20），表示输出的行数，也表示组成“X”的反斜线和正斜线的长度
//针对每行输入，输出用“*”组成的X形图案。
//输入 5
//输出
//*   *
// * *
//  *   
// * *
//*   *


//int main()
//{
//    int a;
//    while (scanf("%d", &a) != EOF)
//    {
//        for (int i = 1; i <= a; i++)//控制行
//        {
//            for (int j = 1; j <= a; j++)//控制列
//            {
//                if ((i == j) || (j == a - i + 1))
//                {                       //第一个条件完成斜杠的打印                        
//                                        //第二个条件完成反斜杠的打印
//                    printf("*");
//                }
//                else
//                {
//                    printf(" ");
//                }
//            }
//            printf("\n");
//        }
//
//    }
//    return 0;
//}
//牛客网习题
//打印用“* ”组成的“空心”正方形图案
//多组输入，一个整数（3~20），表示输出的行数，也表示组成正方形边的“*”的数量
//针对每行输入，输出用“*”组成的“空心”正方形，每个“*”后面有一个空格
//int main()
//{
//    int a;
//    while (scanf("%d", &a) != EOF)
//    {
//        for (int i = 1; i <= a; i++)
//        {
//            for (int j = 1; j <= a; j++)
//            {
//                if ((i == 1) || (j == 1))
//                {
//                    printf("* ");
//                }
//                else if ((i == a) || (j == a))
//                {
//                    printf("* ");
//                }
//                else
//                {
//                    printf("  ");
//
//                }
//            }
//            printf("\n");
//        }
//
//    }
//    return 0;
//}

//牛客网习题
//有一个矩阵，他想知道转置后的矩阵（将矩阵的行列互换得到的新矩阵称为转置矩阵）
//第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。 (1≤n≤10,1≤m≤10)
//从2到n + 1行，每行输入m个整数（范围 - 231~231 - 1），用空格分隔，
// 共输入n * m个数，表示第一个矩阵中的元素。
//
//输出m行n列，为矩阵转置后的结果。每个数后面有一个空格
//int main()
//{
//    int n, m;
//    int arr[10][10] = { 0 };//题目中给出数组的大小为[10][10]
//    scanf("%d %d", &n, &m);
//    int i = 0, j = 0;
//    for (i = 0; i < n; i++) //读取输入的n行m列个元素
//    {
//        for (j = 0; j < m; j++)
//        {
//            scanf("%d", &arr[i][j]);
//        }
//    }
//    for (i = 0; i < m; i++)//将行和列交换，输出元素
//    {
//        for (j = 0; j < n; j++)
//        {
//            printf("%d ", arr[j][i]);
//        }
//        printf("\n");
//    }
//    return 0;
//}
//#include <stdio.h>

//int main()
//{
//    int n = 0;
//    int m = 0;
//    int arr[10][10] = { 0 };
//    scanf("%d %d", &n, &m);
//    int i = 0;
//    int j = 0;
//    for (i = 0; i < n; i++)
//    {
//        for (j = 0; j < m; j++)
//        {
//            scanf("%d", &arr[i][j]);
//        }
//    }
//    for (i = 0; i < m; i++)
//    {
//        for (j = 0; j < n; j++)
//        {
//            printf("%d ", arr[j][i]);
//        }
//        printf("\n");
//    }
//
//    return 0;
//}
// //牛客网习题
//输入10个整数，要求按输入时的逆序把这10个数打印出来。
// 逆序输出，就是按照输入相反的顺序打印这10个数
//int main() 
//{
//    int i = 0;
//    int arr[10] = { 0 };
//    for (i = 0; i < 10; i++) //顺序输入
//    {
//        scanf("%d", &arr[i]);
//    }
//    for (i = 9; i >= 0; i--) //逆序输出
//    {
//        printf("%d ", arr[i]);
//    }
//    printf("\n");
//    return 0;
//}
//牛客网习题——两个有序序列的合并
//输入两个升序排列的序列，将两个序列合并为一个有序序列并输出
//int main()
//{
//    int n = 0, m = 0; //存放读入的两组序列的元素个数
//    int arr1[1000] = { 0 }; //分别存放第一个、第二个和合并后序列的元素
//    int arr2[1000] = { 0 };
//    int arr3[1000] = { 0 };
//
//    scanf("%d %d", &n, &m);
//    int i = 0, j = 0, k = 0;
//    for (int i = 0; i < n; i++) //读入第一个序列的元素
//    {
//        scanf("%d", &arr1[i]);
//    }
//    for (int j = 0; j < m; j++) //读入第二个序列的元素
//    {
//        scanf("%d", &arr2[j]);
//    }
//    i = 0, j = 0; //重置i和j的值
//    while ((i < n) && (j < m)) //当两个序列的元素都没有读取结束时
//    {
//        if (arr1[i] <= arr2[j]) //哪个序列里的当前元素小，就将其放到总的序列中
//        {
//            arr3[k] = arr1[i];
//            i++;
//        }
//        else
//        {
//            arr3[k] = arr2[j];
//            j++;
//        }
//        k++;
//    }
//
//    while (i < n)  //当arr1序列中还有元素未读取时，将剩余元素依次放入总序列arr3中
//    {
//        arr3[k] = arr1[i];
//        i++;
//        k++;
//    }
//    while (j < m) //当arr2序列中还有元素未读取时，将剩余元素依次放入总序列arr3中
//    {
//        arr3[k] = arr2[j];
//        j++;
//        k++;
//    }
//
//    for (k = 0; k < n + m; k++)//打印排序后的序列arr3
//    {
//        printf("%d ", arr3[k]);
//    }
//    return 0;
//}
//// 【一维数组】交换数组
////将数组A中的内容和数组B中的内容进行交换。（数组一样大）
//int main()
//{
//    int arr1[10] = { 1,3,5,7,9,11,13,15,17,19 };
//    int arr2[10] = { 2,4,6,8,10,12,14,16,18,20 };
//    int sz = (sizeof(arr1) / sizeof(arr1[0]));
//    int temp = 0;
//    int i = 0;
//    for (i = 0; i < sz; i++)
//    {
//        temp = arr1[i];
//        arr1[i] = arr2[i];
//        arr2[i] = temp;
//    }
//
//    return 0;
//}
//编写代码，演⽰多个字符从两端移动，向中间汇聚
//#include<windows.h>//Sleep函数的头文件
//int main()
//{
//	char arr1[] = { "what are you speak\n" };
//	char arr2[] = { "*******************" };
//	int left = 0;
//	int right = sizeof(arr1) - 1;
//	while (left <= right)
//	{
//		Sleep(500);
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//		printf("%s\n", arr2);
//	}
//	printf("%s\n", arr2);
//	return 0;
//}

//二分查找
//给定一个有序数组，任意给定一个值，查找该值在数组的位置
//int main()
//{
//	int arr[] = { 5,9,12,15,20,32,36,42,56,78,89 };
//	int key = 36;  //要查找的值
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int left = 0;
//	int right = sz - 1;
//	int flag = 0;//标志位
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] > key)
//		{
//			right = mid - 1;
//		}
//		else if (arr[mid] < key)
//		{
//			left = mid + 1;
//		}
//		else
//		{
//			printf("arr[%d]=%d\n", mid, key);
//			flag = 1;
//			break;//如果没有break，代码会陷入死循环
//		}
//
//	}
//	if (!flag)
//	{
//		printf("can't find!!\n");
//	}
//	return 0;
//}

//乘法口诀表的打印
int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <=i; j++)
		{
			printf("%d*%d=%-2d  ", j, i, j * i);
		}
		printf("\n");
	}
	return 0;
}